﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace wpfArVideo
{
    public class Usuario
    {
        private String nombre;
        private String contrasena;
        const String yes = "Yes";
        const String no = "No";

        public Usuario(String nombre, String contrasena)
        {
            this.nombre = nombre;
            this.contrasena = EncodePassword(contrasena);
        }

        public String getNombre()
        {
            return nombre;
        }

        public String getContrasena()
        {
            return contrasena;
        }

        public void setNombre(String nombre)
        {
            this.nombre = nombre;
        }

        public void setContrasena(String contrasena)
        {
            this.contrasena = contrasena;
        }


        private string EncodePassword(string originalPassword)
        {
            //Declarations
            Byte[] originalBytes;
            Byte[] encodedBytes;
            MD5 md5;

            //Instantiate MD5CryptoServiceProvider, get bytes for original password and compute hash (encoded password)
            md5 = new MD5CryptoServiceProvider();
            originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
            encodedBytes = md5.ComputeHash(originalBytes);

            //Convert encoded bytes back to a 'readable' string
            return BitConverter.ToString(encodedBytes);
        }

        public String CrearUsuario()
        {
            /*Nos conectamos a la base de datos*/
            ARBDDataContext bd = new ARBDDataContext();
            
            String res = null;
            String nom = this.getNombre();
            String con = this.getContrasena();
            
            var q = from t in bd.jugadors
                    where t.Usuario == nom
                    select t;

            if (q.FirstOrDefault() != null)
            {
               res ="Nombre de usuario en uso";
            }
            else if (nom.Contains(" "))
            {
               res = "No se permiten espacios en blanco en el nombre de usuario";
            }
            else if (nom == "")
            {
               res ="Nombre de usuario vacio";
            }
            else
            {
                jugador j = new jugador();
                j.Usuario = nom;
                j.Contraseña = con;
                j.Connected = yes;
                bd.jugadors.InsertOnSubmit(j);
                bd.SubmitChanges();
            }          
            return res;
        }

        public String IniciarSesion()
        {
            ARBDDataContext bd = new ARBDDataContext();

            String res = null;
            String nom = this.getNombre();
            String con = this.getContrasena();

            var q = from t in bd.jugadors
                    where (t.Usuario == nom) && (con == t.Contraseña)
                    select t;

            if (q.FirstOrDefault() != null)
            {
                 /*Hay algun nombre de usuario que corresponde*/
                jugador j = q.First();
                j.Connected = "No"; // añadido para poder iniciar sesión siempre
                if (j.Connected == "Yes")
                {
                    res = "Usuario conectado previamente";
                }
                else
   
                {
                    j.Connected = yes;
                    var u = from t in bd.participacions
                            where t.jugador.Usuario == nom
                            select t;
                    bd.participacions.DeleteAllOnSubmit(u);
                    bd.SubmitChanges();
                }
            }
            else
            {
                res = "Nombre de usuario o contraseña incorrectos";
            }

            return res;
        }
    }
}
